package org.raymond.iworks.study.netty.official.fundamental.time;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;

import java.util.List;

/**
 * @author raymond
 * @version V1.0
 * @Description: TODO
 * 1) ByteToMessageDecoder是ChannelInboundHandler的具体实现,该类使得处理分片变得更容易
 * 2) 每当接收到新数据时,ByteToMessageDecoder使用内部维护的累积缓冲区调用decode()方法
 * 3) 当累积缓冲区中没有足够的数据时,Decode()可以决定不向out添加任何数据.当有更多数据到来时,ByteToMessageDecoder会再次调用decode()方法
 * 4) 如果decode()向out添加一个对象,则表示解码器成功解码了一条消息.这时候ByteToMessageDecoder将丢弃累积缓冲区中已处理成功的数据.
 * 请记住,您不需要解码多个消息.ByteToMessageDecoder将多次调用decode()方法,直到decode()不再向out添加任何内容
 */
public class TimeDecoder2 extends ByteToMessageDecoder {
    @Override
    protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) { // (2)
        if (in.readableBytes() < 4) {
            return; // (3)
        }
        out.add(in.readBytes(4)); // (4)
    }
}
